package com.smasher.update.component.install

import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.provider.Settings
import androidx.annotation.RequiresApi

class InstallImp {


    @RequiresApi(api = Build.VERSION_CODES.O)
    fun checkHasInstallPermission(context: Context) {
        //兼容8.0
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val hasInstallPermission: Boolean = context.packageManager.canRequestPackageInstalls()
            if (!hasInstallPermission) {
                startInstallPermissionSettingActivity(context)
                return
            }
        }
    }


    /**
     * 跳转到设置-允许安装未知来源-页面
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    private fun startInstallPermissionSettingActivity(context: Context) {
        //后面跟上包名，可以直接跳转到对应APP的未知来源权限设置界面。使用startActivityForResult 是为了在关闭设置界面之后，获取用户的操作结果，然后根据结果做其他处理
        val intent = Intent(
            Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
            Uri.parse("package:" + context.packageName)
        )
        context.startActivity(intent)
    }


    /**
     * 安装apk
     */
    private fun installApk(context: Context, uri: Uri) {

        val typeApk = "application/vnd.android.package-archive"

        val intent = Intent(Intent.ACTION_VIEW)
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        intent.setDataAndType(uri, typeApk)

        if ((Build.VERSION.SDK_INT >= 24)) {//版本是否在7.0以上
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            intent.addFlags(
                Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
            )
            intent.addCategory("android.intent.category.DEFAULT")
            //对目标apk的uri临时授权 使得有权限打开该Uri指向的Apk
        } else {
            intent.addCategory("android.intent.category.DEFAULT")
        }
        context.startActivity(intent)
    }

}